1 module mruby;
2 
3 import mruby.value;
4 import mruby.proc;
5 import mruby.mrb_class;
6 import mruby.object;
7 import mruby.variable;
8 import mruby.gc;
9 
10 import core.stdc.config;
11 
12 extern (C):
13 
14 alias uint mrb_code;
15 alias uint mrb_aspec;
16 alias void* function (mrb_state*, void*, c_ulong, void*) mrb_allocf;
17 alias _Anonymous_0 mrb_callinfo;
18 alias void function (mrb_state*) mrb_atexit_func;
19 alias mrb_value function (mrb_state*, mrb_value) mrb_func_t;
20 
21 struct alloca_header;
22 struct kh_n2s;
23 struct symbol_name;
24 
25 enum mrb_fiber_state
26 {
27 	MRB_FIBER_CREATED = 0,
28 	MRB_FIBER_RUNNING = 1,
29 	MRB_FIBER_RESUMING = 2,
30 	MRB_FIBER_SUSPENDED = 3,
31 	MRB_FIBER_TRANSFERRED = 4,
32 	MRB_FIBER_TERMINATED = 5
33 }
34 
35 enum GC_state
36 {
37 	GC_STATE_ROOT = 0,
38 	GC_STATE_MARK = 1,
39 	GC_STATE_SWEEP = 2
40 }
41 
42 enum call_type
43 {
44 	CALL_PUBLIC = 0,
45 	CALL_FCALL = 1,
46 	CALL_VCALL = 2,
47 	CALL_TYPE_MAX = 3
48 }
49 
50 struct _Anonymous_0
51 {
52 	mrb_sym mid;
53 	RProc* proc;
54 	mrb_value* stackent;
55 	int nregs;
56 	int ridx;
57 	int eidx;
58 	REnv* env;
59 	mrb_code* pc;
60 	mrb_code* err;
61 	int argc;
62 	int acc;
63 	RClass* target_class;
64 }
65 
66 struct mrb_context
67 {
68 	mrb_context* prev;
69 	mrb_value* stack;
70 	mrb_value* stbase;
71 	mrb_value* stend;
72 	mrb_callinfo* ci;
73 	mrb_callinfo* cibase;
74 	mrb_callinfo* ciend;
75 	mrb_code** rescue;
76 	int rsize;
77 	RProc** ensure;
78 	int esize;
79 	enum mrb_fiber_state
80 	{
81 		MRB_FIBER_CREATED = 0,
82 		MRB_FIBER_RUNNING = 1,
83 		MRB_FIBER_RESUMING = 2,
84 		MRB_FIBER_SUSPENDED = 3,
85 		MRB_FIBER_TRANSFERRED = 4,
86 		MRB_FIBER_TERMINATED = 5
87 	}
88 	mrb_fiber_state status;
89 	RFiber* fib;
90 }
91 
92 struct mrb_state
93 {
94 	mrb_jmpbuf* jmp;
95 	mrb_allocf allocf;
96 	void* allocf_ud;
97 	mrb_context* c;
98 	mrb_context* root_c;
99 	RObject* exc;
100 	iv_tbl* globals;
101 	RObject* top_self;
102 	RClass* object_class;
103 	RClass* class_class;
104 	RClass* module_class;
105 	RClass* proc_class;
106 	RClass* string_class;
107 	RClass* array_class;
108 	RClass* hash_class;
109 	RClass* float_class;
110 	RClass* fixnum_class;
111 	RClass* true_class;
112 	RClass* false_class;
113 	RClass* nil_class;
114 	RClass* symbol_class;
115 	RClass* kernel_module;
116 	heap_page* heaps;
117 	heap_page* sweeps;
118 	heap_page* free_heaps;
119 	size_t live;
120 	RBasic** arena;
121 	int arena_capa;
122 	int arena_idx;
123 	GC_state gc_state;
124 	int current_white_part;
125 	RBasic* gray_list;
126 	RBasic* atomic_gray_list;
127 	size_t gc_live_after_mark;
128 	size_t gc_threshold;
129 	int gc_interval_ratio;
130 	int gc_step_ratio;
131 	mrb_bool gc_disabled;
132 	mrb_bool gc_full;
133 	mrb_bool is_generational_gc_mode;
134 	mrb_bool out_of_memory;
135 	size_t majorgc_old_threshold;
136 	alloca_header* mems;
137 	mrb_sym symidx;
138 	kh_n2s* name2sym;
139 	symbol_name* symtbl;
140 	size_t symcapa;
141 	RClass* eException_class;
142 	RClass* eStandardError_class;
143 	RObject* nomem_err;
144 	void* ud;
145 	mrb_atexit_func* atexit_stack;
146 	mrb_int atexit_stack_len;
147 }
148 
149 struct mrb_jmpbuf;
150 
151 
152 struct mrb_irep;
153 
154 
155 struct mrb_pool;
156 
157 
158 RClass* mrb_define_class (mrb_state*, const(char)*, RClass*);
159 RClass* mrb_define_module (mrb_state*, const(char)*);
160 mrb_value mrb_singleton_class (mrb_state*, mrb_value);
161 void mrb_include_module (mrb_state*, RClass*, RClass*);
162 void mrb_define_method (mrb_state*, RClass*, const(char)*, mrb_func_t, mrb_aspec);
163 void mrb_define_class_method (mrb_state*, RClass*, const(char)*, mrb_func_t, mrb_aspec);
164 void mrb_define_singleton_method (mrb_state*, RObject*, const(char)*, mrb_func_t, mrb_aspec);
165 void mrb_define_module_function (mrb_state*, RClass*, const(char)*, mrb_func_t, mrb_aspec);
166 void mrb_define_const (mrb_state*, RClass*, const(char)* name, mrb_value);
167 void mrb_undef_method (mrb_state*, RClass*, const(char)*);
168 void mrb_undef_class_method (mrb_state*, RClass*, const(char)*);
169 mrb_value mrb_obj_new (mrb_state* mrb, RClass* c, mrb_int argc, const(mrb_value)* argv);
170 mrb_value mrb_instance_new (mrb_state* mrb, mrb_value cv);
171 RClass* mrb_class_new (mrb_state* mrb, RClass* super_);
172 RClass* mrb_module_new (mrb_state* mrb);
173 mrb_bool mrb_class_defined (mrb_state* mrb, const(char)* name);
174 RClass* mrb_class_get (mrb_state* mrb, const(char)* name);
175 RClass* mrb_class_get_under (mrb_state* mrb, RClass* outer, const(char)* name);
176 RClass* mrb_module_get (mrb_state* mrb, const(char)* name);
177 RClass* mrb_module_get_under (mrb_state* mrb, RClass* outer, const(char)* name);
178 mrb_value mrb_notimplement_m (mrb_state*, mrb_value);
179 mrb_value mrb_obj_dup (mrb_state* mrb, mrb_value obj);
180 mrb_value mrb_check_to_integer (mrb_state* mrb, mrb_value val, const(char)* method);
181 mrb_bool mrb_obj_respond_to (mrb_state* mrb, RClass* c, mrb_sym mid);
182 RClass* mrb_define_class_under (mrb_state* mrb, RClass* outer, const(char)* name, RClass* super_);
183 RClass* mrb_define_module_under (mrb_state* mrb, RClass* outer, const(char)* name);
184 
185 mrb_aspec MRB_ARGS_NONE()
186 {
187 	return cast(mrb_aspec)0;
188 }
189 
190 mrb_int mrb_get_args (mrb_state* mrb, const(char)* format, ...);
191 mrb_value mrb_funcall (mrb_state*, mrb_value, const(char)*, mrb_int, ...);
192 mrb_value mrb_funcall_argv (mrb_state*, mrb_value, mrb_sym, mrb_int, const(mrb_value)*);
193 mrb_value mrb_funcall_with_block (mrb_state*, mrb_value, mrb_sym, mrb_int, const(mrb_value)*, mrb_value);
194 mrb_sym mrb_intern_cstr (mrb_state*, const(char)*);
195 mrb_sym mrb_intern (mrb_state*, const(char)*, size_t);
196 mrb_sym mrb_intern_static (mrb_state*, const(char)*, size_t);
197 mrb_sym mrb_intern_str (mrb_state*, mrb_value);
198 mrb_value mrb_check_intern_cstr (mrb_state*, const(char)*);
199 mrb_value mrb_check_intern (mrb_state*, const(char)*, size_t);
200 mrb_value mrb_check_intern_str (mrb_state*, mrb_value);
201 const(char)* mrb_sym2name (mrb_state*, mrb_sym);
202 const(char)* mrb_sym2name_len (mrb_state*, mrb_sym, mrb_int*);
203 mrb_value mrb_sym2str (mrb_state*, mrb_sym);
204 void* mrb_malloc (mrb_state*, size_t);
205 void* mrb_calloc (mrb_state*, size_t, size_t);
206 void* mrb_realloc (mrb_state*, void*, size_t);
207 void* mrb_realloc_simple (mrb_state*, void*, size_t);
208 void* mrb_malloc_simple (mrb_state*, size_t);
209 RBasic* mrb_obj_alloc (mrb_state*, mrb_vtype, RClass*);
210 void mrb_free (mrb_state*, void*);
211 mrb_value mrb_str_new (mrb_state* mrb, const(char)* p, size_t len);
212 mrb_value mrb_str_new_cstr (mrb_state*, const(char)*);
213 mrb_value mrb_str_new_static (mrb_state* mrb, const(char)* p, size_t len);
214 mrb_state* mrb_open ();
215 mrb_state* mrb_open_allocf (mrb_allocf, void* ud);
216 mrb_state* mrb_open_core (mrb_allocf, void* ud);
217 void mrb_close (mrb_state*);
218 void* mrb_default_allocf (mrb_state*, void*, size_t, void*);
219 mrb_value mrb_top_self (mrb_state*);
220 mrb_value mrb_run (mrb_state*, RProc*, mrb_value);
221 mrb_value mrb_toplevel_run (mrb_state*, RProc*);
222 mrb_value mrb_context_run (mrb_state*, RProc*, mrb_value, uint);
223 void mrb_p (mrb_state*, mrb_value);
224 mrb_int mrb_obj_id (mrb_value obj);
225 mrb_sym mrb_obj_to_sym (mrb_state* mrb, mrb_value name);
226 mrb_bool mrb_obj_eq (mrb_state*, mrb_value, mrb_value);
227 mrb_bool mrb_obj_equal (mrb_state*, mrb_value, mrb_value);
228 mrb_bool mrb_equal (mrb_state* mrb, mrb_value obj1, mrb_value obj2);
229 mrb_value mrb_convert_to_integer (mrb_state* mrb, mrb_value val, int base);
230 mrb_value mrb_Integer (mrb_state* mrb, mrb_value val);
231 mrb_value mrb_Float (mrb_state* mrb, mrb_value val);
232 mrb_value mrb_inspect (mrb_state* mrb, mrb_value obj);
233 mrb_bool mrb_eql (mrb_state* mrb, mrb_value obj1, mrb_value obj2);
234 void mrb_garbage_collect (mrb_state*);
235 void mrb_full_gc (mrb_state*);
236 void mrb_incremental_gc (mrb_state*);
237 int mrb_gc_arena_save (mrb_state*);
238 void mrb_gc_arena_restore (mrb_state*, int);
239 void mrb_gc_mark (mrb_state*, RBasic*);
240 void mrb_field_write_barrier (mrb_state*, RBasic*, RBasic*);
241 void mrb_write_barrier (mrb_state*, RBasic*);
242 mrb_value mrb_check_convert_type (mrb_state* mrb, mrb_value val, mrb_vtype type, const(char)* tname, const(char)* method);
243 mrb_value mrb_any_to_s (mrb_state* mrb, mrb_value obj);
244 const(char)* mrb_obj_classname (mrb_state* mrb, mrb_value obj);
245 RClass* mrb_obj_class (mrb_state* mrb, mrb_value obj);
246 mrb_value mrb_class_path (mrb_state* mrb, RClass* c);
247 mrb_value mrb_convert_type (mrb_state* mrb, mrb_value val, mrb_vtype type, const(char)* tname, const(char)* method);
248 mrb_bool mrb_obj_is_kind_of (mrb_state* mrb, mrb_value obj, RClass* c);
249 mrb_value mrb_obj_inspect (mrb_state* mrb, mrb_value self);
250 mrb_value mrb_obj_clone (mrb_state* mrb, mrb_value self);
251 mrb_value mrb_exc_new (mrb_state* mrb, RClass* c, const(char)* ptr, c_long len);
252 void mrb_exc_raise (mrb_state* mrb, mrb_value exc);
253 void mrb_raise (mrb_state* mrb, RClass* c, const(char)* msg);
254 void mrb_raisef (mrb_state* mrb, RClass* c, const(char)* fmt, ...);
255 void mrb_name_error (mrb_state* mrb, mrb_sym id, const(char)* fmt, ...);
256 void mrb_warn (mrb_state* mrb, const(char)* fmt, ...);
257 void mrb_bug (mrb_state* mrb, const(char)* fmt, ...);
258 void mrb_print_backtrace (mrb_state* mrb);
259 void mrb_print_error (mrb_state* mrb);
260 mrb_value mrb_yield (mrb_state* mrb, mrb_value b, mrb_value arg);
261 mrb_value mrb_yield_argv (mrb_state* mrb, mrb_value b, mrb_int argc, const(mrb_value)* argv);
262 mrb_value mrb_yield_with_class (mrb_state* mrb, mrb_value b, mrb_int argc, const(mrb_value)* argv, mrb_value self, RClass* c);
263 void mrb_gc_protect (mrb_state* mrb, mrb_value obj);
264 mrb_value mrb_to_int (mrb_state* mrb, mrb_value val);
265 void mrb_check_type (mrb_state* mrb, mrb_value x, mrb_vtype t);
266 void mrb_define_alias (mrb_state* mrb, RClass* klass, const(char)* name1, const(char)* name2);
267 const(char)* mrb_class_name (mrb_state* mrb, RClass* klass);
268 void mrb_define_global_const (mrb_state* mrb, const(char)* name, mrb_value val);
269 mrb_value mrb_attr_get (mrb_state* mrb, mrb_value obj, mrb_sym id);
270 mrb_bool mrb_respond_to (mrb_state* mrb, mrb_value obj, mrb_sym mid);
271 mrb_bool mrb_obj_is_instance_of (mrb_state* mrb, mrb_value obj, RClass* c);
272 mrb_value mrb_fiber_resume (mrb_state* mrb, mrb_value fib, mrb_int argc, const(mrb_value)* argv);
273 mrb_value mrb_fiber_yield (mrb_state* mrb, mrb_int argc, const(mrb_value)* argv);
274 mrb_pool* mrb_pool_open (mrb_state*);
275 void mrb_pool_close (mrb_pool*);
276 void* mrb_pool_alloc (mrb_pool*, size_t);
277 void* mrb_pool_realloc (mrb_pool*, void*, size_t oldlen, size_t newlen);
278 mrb_bool mrb_pool_can_realloc (mrb_pool*, void*, size_t);
279 void* mrb_alloca (mrb_state* mrb, size_t);
280 void mrb_state_atexit (mrb_state* mrb, mrb_atexit_func func);
281 void mrb_show_version (mrb_state* mrb);
282 void mrb_show_copyright (mrb_state* mrb);
283 mrb_value mrb_format (mrb_state* mrb, const(char)* format, ...);